{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapter 3 - Deep Q-learning\n",
    "### Deep Reinforcement Learning *in Action*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 3.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from Gridworld import Gridworld\n",
    "game = Gridworld(size=4, mode='static')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([['+', '-', ' ', 'P'],\n",
       "       [' ', 'W', ' ', ' '],\n",
       "       [' ', ' ', ' ', ' '],\n",
       "       [' ', ' ', ' ', ' ']], dtype='<U2')"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "game.display()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([['+', '-', ' ', ' '],\n",
       "       [' ', 'W', ' ', ' '],\n",
       "       [' ', ' ', 'P', ' '],\n",
       "       [' ', ' ', ' ', ' ']], dtype='<U2')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "game.makeMove('d')\n",
    "game.makeMove('d')\n",
    "game.makeMove('l')\n",
    "game.display()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "game.reward()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 1, 0],\n",
       "        [0, 0, 0, 0]],\n",
       "\n",
       "       [[1, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0]],\n",
       "\n",
       "       [[0, 1, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0]],\n",
       "\n",
       "       [[0, 0, 0, 0],\n",
       "        [0, 1, 0, 0],\n",
       "        [0, 0, 0, 0],\n",
       "        [0, 0, 0, 0]]], dtype=uint8)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "game.board.render_np()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 3.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import torch\n",
    "from Gridworld import Gridworld\n",
    "from IPython.display import clear_output\n",
    "import random\n",
    "from matplotlib import pylab as plt\n",
    "\n",
    "l1 = 64\n",
    "l2 = 150\n",
    "l3 = 100\n",
    "l4 = 4\n",
    "\n",
    "model = torch.nn.Sequential(\n",
    "    torch.nn.Linear(l1, l2),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(l2, l3),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(l3,l4)\n",
    ")\n",
    "loss_fn = torch.nn.MSELoss()\n",
    "learning_rate = 1e-3\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
    "\n",
    "gamma = 0.9\n",
    "epsilon = 1.0\n",
    "learning_rate = 1e-3\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
    "\n",
    "gamma = 0.9\n",
    "epsilon = 1.0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 3.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "action_set = {\n",
    "    0: 'u',\n",
    "    1: 'd',\n",
    "    2: 'l',\n",
    "    3: 'r',\n",
    "}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "999 0.028739098459482193\n"
     ]
    }
   ],
   "source": [
    "epochs = 1000\n",
    "losses = [] #A\n",
    "for i in range(epochs): #B\n",
    "    game = Gridworld(size=4, mode='static') #C\n",
    "    state_ = game.board.render_np().reshape(1,64) + np.random.rand(1,64)/10.0 #D\n",
    "    state = torch.from_numpy(state_).float() #E\n",
    "    status = 1 #F\n",
    "    while(status == 1): #G\n",
    "        qval = model(state) #H\n",
    "        qval_ = qval.data.numpy()\n",
    "        if (random.random() < epsilon): #I\n",
    "            action_ = np.random.randint(0,4)\n",
    "        else:\n",
    "            action_ = np.argmax(qval_)\n",
    "        \n",
    "        action = action_set[action_] #J\n",
    "        game.makeMove(action) #K\n",
    "        state2_ = game.board.render_np().reshape(1,64) + np.random.rand(1,64)/10.0\n",
    "        state2 = torch.from_numpy(state2_).float() #L\n",
    "        reward = game.reward()\n",
    "        with torch.no_grad():\n",
    "            newQ = model(state2.reshape(1,64))\n",
    "        maxQ = torch.max(newQ) #M\n",
    "        if reward == -1: #N\n",
    "            Y = reward + (gamma * maxQ)\n",
    "        else:\n",
    "            Y = reward\n",
    "        Y = torch.Tensor([Y]).detach()\n",
    "        X = qval.squeeze()[action_] #O\n",
    "        loss = loss_fn(X, Y) #P\n",
    "        print(i, loss.item())\n",
    "        clear_output(wait=True)\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        losses.append(loss.item())\n",
    "        optimizer.step()\n",
    "        state1 = state2\n",
    "        if reward != -1: #Q\n",
    "            status = 0\n",
    "    if epsilon > 0.1: #R\n",
    "        epsilon -= (1/epochs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Loss')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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vrjq++TiCziOJAymunfkEqdDABDn3PbwUIqziGfka+GL933lriuv9zWye4Pl5eVas2aNysrKdPbZZ6tZs2Z2hwArxfkFCHCSCxtrANtwewEQT0xrCSsoKNC4ceM0btw4paenh1zms88+U4cOHdSjRw9dcsklateunf7617/aNiEBEHd8UCiP5PLgxi5ldvPi9ZSvDQDgN6a1hH377be6//771bBhQ23durXG65MnT9Z9992nQCAQLCQcPnxYr776qgoKCvTWW2+ZFYp/UZCBOAwAAADczrSWsOnTp0uSLr30UnXu3LnG608//bSkI7W0F1xwgW666Sa1aNFChmFo2LBhWrFihVmhwCS1jbuwupBPrTjgLO+1pR3lwYZAAIAPmZaErV27VoFAQFdddVWN19LS0rRq1SoFAgE99thjWr58ucaNG6elS5eqWbNmMgxDn3zyiVmhADagpAdnuW1yimhwFgEA/Mq0JGz//v2SpLPPPrvGa1OnTpUkNWrUSIMHDw7+/ayzztItt9wiwzC0YMECs0KBhWilii9uGUO1O/uw0yHExC370Srx/ekAb+A8BOKL6UlYUlJSjdfmz58vSbrssst0wgknVHvt0ksvlaSQ48gAOM2o8j/r2i2KyyosWzcAAIDbmJaEVVQcKUTl5OTUeG3RokUKBAK68sora7zWtm1bSVJ+fr5ZoQCwQTx0hwPchO6Z7mRlBRQA/zItCats4dqxY0e1v6elpenAgQOSpOTk5BrvO3z4SDekhIQEs0IBAByLciQQdzitrRPv3czdws972bQkrHv37jIMQ2PHjq32908//fTIhho00BVXXFHjfZXPFOvYsaNZoQBAXIr1ZkWZIkrsN6AariVA7ExLwm688UZJ0vr163XHHXdo8uTJevnllzVs2DAFAgH16dNHLVu2rPG+pUuXSgo9oQcA8zGFtzfQ3RPxhm59AHCUaQ9rvv/++/XGG29o06ZN+uabb/TNN99IOvJcsIYNG+q5556r8Z7CwkJNnz5dgUAgOEEHADjp2Bpeio3O83Ktu9tipxIGANzBtJawhIQETZkyRT169JBhGMGfpk2basSIEfrZz35W4z1jxoxRYWGhJOmaa64xKxQAAAAAcC3TWsIk6ZRTTlFqaqpSU1O1efNmNWvWTJdffrmOP/74kMs3adJEzz//vAKBQMgkDUDk7Kp5p2sR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nTp1UiAQ0IQJE6q9bhiGBg8erI4dO+q4445Tnz59tGnTpmrLHDx4UHfddZeSkpLUqlUrPfDAA8rPz6+2zMqVK3XllVeqSZMm6ty5s1577bUasYwdO1Zdu3ZVkyZNdP7552vSpEmmf143GDp0qC655BK1aNFC7dq100033aQNGzZUW6aoqEgDBw7UCSecoObNm2vAgAHKzMystkx6err69++vpk2bql27dnryySdVVlZWbZnZs2froosuUmJios444wyNGjWqRjx+OF+GDx+u7t27Bx/CmZycrB9//DH4OvvbHq+88ooCgYAef/zx4N/Y9+Z64YUXFAgEqv107do1+Dr72zq7d+/Wb3/7W51wwgk67rjjdP7552vZsmXB17mfmuuUU06pcawHAgENHDhQEse65xjwvDFjxhgJCQnGJ598YqxZs8Z48MEHjVatWhmZmZlOh+ZKkyZNMv7f//t/xrhx4wxJxvjx46u9/sorrxgtW7Y0JkyYYKxYscL49a9/bZx66qnG4cOHg8tcd911xgUXXGAsXrzYmDdvnnHGGWcYd9xxR/D1nJwco3379sZdd91lrF692vjqq6+M4447znj//feDyyxYsMBo2LCh8dprrxlr1641nn32WaNx48bGqlWrLN8Hduvbt68xcuRIY/Xq1UZaWppx/fXXG126dDHy8/ODyzz88MNG586djRkzZhjLli0zLrvsMuNnP/tZ8PWysjLjvPPOM/r06WMsX77cmDRpktGmTRvjmWeeCS6zdetWo2nTpsagQYOMtWvXGu+8847RsGFDY/LkycFl/HK+/Oc//zF++OEHY+PGjcaGDRuMv/71r0bjxo2N1atXG4bB/rbDkiVLjFNOOcXo3r278cc//jH4d/a9uZ5//nnj3HPPNfbu3Rv82bdvX/B19rc1Dh48aJx88snGfffdZ6SkpBhbt241pkyZYmzevDm4DPdTc2VlZVU7zqdNm2ZIMmbNmmUYBse615CExYFLL73UGDhwYPD38vJyo1OnTsbQoUMdjMobjk3CKioqjA4dOhj/+Mc/gn/Lzs42EhMTja+++sowDMNYu3atIclYunRpcJkff/zRCAQCxu7duw3DMIz33nvPOP74443i4uLgMk8//bRx9tlnB3+/9dZbjf79+1eLp1evXsbvf/97Uz+jG2VlZRmSjDlz5hiGcWQfN27c2Bg7dmxwmXXr1hmSjEWLFhmGcSR5btCggZGRkRFcZvjw4UZSUlJwPz/11FPGueeeW21bt912m9G3b9/g734+X44//njjo48+Yn/bIC8vzzjzzDONadOmGT//+c+DSRj73nzPP/+8ccEFF4R8jf1tnaefftq44ooran2d+6n1/vjHPxqnn366UVFRwbHuQXRH9LiSkhKlpqaqT58+wb81aNBAffr00aJFixyMzJu2bdumjIyMavuzZcuW6tWrV3B/Llq0SK1atdLFF18cXKZPnz5q0KCBUlJSgstcddVVSkhICC7Tt29fbdiwQYcOHQouU3U7lcv44XvLycmRJLVu3VqSlJqaqtLS0mr7o2vXrurSpUu1/X7++eerffv2wWX69u2r3NxcrVmzJrhMXfvUr+dLeXm5xowZo4KCAiUnJ7O/bTBw4ED179+/xv5h31tj06ZN6tSpk0477TTdddddSk9Pl8T+ttJ//vMfXXzxxfrNb36jdu3aqUePHvrwww+Dr3M/tVZJSYm++OIL/e53v1MgEOBY9yCSMI/bv3+/ysvLq51QktS+fXtlZGQ4FJV3Ve6zuvZnRkaG2rVrV+31Ro0aqXXr1tWWCbWOqtuobZl4/94qKir0+OOP6/LLL9d5550n6ci+SEhIUKtWraote+x+j3af5ubm6vDhw747X1atWqXmzZsrMTFRDz/8sMaPH69u3bqxvy02ZswY/fTTTxo6dGiN19j35uvVq5dGjRqlyZMna/jw4dq2bZuuvPJK5eXlsb8ttHXrVg0fPlxnnnmmpkyZokceeUT/93//p08//VQS91OrTZgwQdnZ2brvvvskcW3xokZOBwDAXwYOHKjVq1dr/vz5TocS984++2ylpaUpJydH3377re69917NmTPH6bDi2s6dO/XHP/5R06ZNU5MmTZwOxxf69esX/H/37t3Vq1cvnXzyyfrmm2903HHHORhZfKuoqNDFF1+sv//975KkHj16aPXq1RoxYoTuvfdeh6OLfx9//LH69eunTp06OR0KokRLmMe1adNGDRs2rDH7TWZmpjp06OBQVN5Vuc/q2p8dOnRQVlZWtdfLysp08ODBasuEWkfVbdS2TDx/b48++qgmTpyoWbNm6aSTTgr+vUOHDiopKVF2dna15Y/d79Hu06SkJB133HG+O18SEhJ0xhlnqGfPnho6dKguuOACvfXW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",
      "text/plain": [
       "<Figure size 1000x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,7))\n",
    "plt.plot(losses)\n",
    "plt.xlabel(\"Epochs\",fontsize=22)\n",
    "plt.ylabel(\"Loss\",fontsize=22)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### PyTorch Automatic Differentiation Review"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "m = torch.Tensor([2.0])\n",
    "m.requires_grad=True\n",
    "b = torch.Tensor([1.0])\n",
    "b.requires_grad=True\n",
    "def linear_model(x,m,b):\n",
    "    y = m + b#@ x + b\n",
    "    return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "#with torch.no_grad():\n",
    "y = linear_model(torch.Tensor([4]),m,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AddBackward0 at 0x7f8c059e6fe0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y.grad_fn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "y.backward()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tensor([1.])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m.grad"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 3.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def test_model(model, mode='static', display=True):\n",
    "    i = 0\n",
    "    test_game = Gridworld(mode=mode)\n",
    "    state_ = test_game.board.render_np().reshape(1,64) + np.random.rand(1,64)/10.0\n",
    "    state = torch.from_numpy(state_).float()\n",
    "    if display:\n",
    "        print(\"Initial State:\")\n",
    "        print(test_game.display())\n",
    "    status = 1\n",
    "    while(status == 1): #A\n",
    "        qval = model(state)\n",
    "        qval_ = qval.data.numpy()\n",
    "        action_ = np.argmax(qval_) #B\n",
    "        action = action_set[action_]\n",
    "        if display:\n",
    "            print('Move #: %s; Taking action: %s' % (i, action))\n",
    "        test_game.makeMove(action)\n",
    "        state_ = test_game.board.render_np().reshape(1,64) + np.random.rand(1,64)/10.0\n",
    "        state = torch.from_numpy(state_).float()\n",
    "        if display:\n",
    "            print(test_game.display())\n",
    "        reward = test_game.reward()\n",
    "        if reward != -1:\n",
    "            if reward > 0:\n",
    "                status = 2\n",
    "                if display:\n",
    "                    print(\"Game won! Reward: %s\" % (reward,))\n",
    "            else:\n",
    "                status = 0\n",
    "                if display:\n",
    "                    print(\"Game LOST. Reward: %s\" % (reward,))\n",
    "        i += 1\n",
    "        if (i > 15):\n",
    "            if display:\n",
    "                print(\"Game lost; too many moves.\")\n",
    "            break\n",
    "    \n",
    "    win = True if status == 2 else False\n",
    "    return win"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initial State:\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 0; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 1; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 2; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 3; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 4; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 5; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 6; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 7; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 8; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 9; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 10; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 11; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 12; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 13; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 14; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Move #: 15; Taking action: l\n",
      "[[' ' '+' ' ' ' ']\n",
      " [' ' ' ' ' ' 'W']\n",
      " [' ' ' ' '-' ' ']\n",
      " ['P' ' ' ' ' ' ']]\n",
      "Game lost; too many moves.\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_model(model, 'random')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Listing 3.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "l1 = 64\n",
    "l2 = 150\n",
    "l3 = 100\n",
    "l4 = 4\n",
    "\n",
    "model = torch.nn.Sequential(\n",
    "    torch.nn.Linear(l1, l2),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(l2, l3),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(l3,l4)\n",
    ")\n",
    "loss_fn = torch.nn.MSELoss()\n",
    "learning_rate = 1e-3\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
    "\n",
    "learning_rate = 1e-3\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
    "\n",
    "gamma = 0.9\n",
    "epsilon = 0.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4999 0.04379083961248398\n"
     ]
    }
   ],
   "source": [
    "from collections import deque\n",
    "epochs = 5000\n",
    "losses = []\n",
    "mem_size = 1000 #A\n",
    "batch_size = 200 #B\n",
    "replay = deque(maxlen=mem_size) #C\n",
    "max_moves = 50 #D\n",
    "h = 0\n",
    "for i in range(epochs):\n",
    "    game = Gridworld(size=4, mode='random')\n",
    "    state1_ = game.board.render_np().reshape(1,64) + np.random.rand(1,64)/100.0\n",
    "    state1 = torch.from_numpy(state1_).float()\n",
    "    status = 1\n",
    "    mov = 0\n",
    "    while(status == 1): \n",
    "        mov += 1\n",
    "        qval = model(state1) #E\n",
    "        qval_ = qval.data.numpy()\n",
    "        if (random.random() < epsilon): #F\n",
    "            action_ = np.random.randint(0,4)\n",
    "        else:\n",
    "            action_ = np.argmax(qval_)\n",
    "        \n",
    "        action = action_set[action_]\n",
    "        game.makeMove(action)\n",
    "        state2_ = game.board.render_np().reshape(1,64) + np.random.rand(1,64)/100.0\n",
    "        state2 = torch.from_numpy(state2_).float()\n",
    "        reward = game.reward()\n",
    "        done = True if reward > 0 else False\n",
    "        exp =  (state1, action_, reward, state2, done) #G\n",
    "        replay.append(exp) #H\n",
    "        state1 = state2\n",
    "        \n",
    "        if len(replay) > batch_size: #I\n",
    "            minibatch = random.sample(replay, batch_size) #J\n",
    "            state1_batch = torch.cat([s1 for (s1,a,r,s2,d) in minibatch]) #K\n",
    "            action_batch = torch.Tensor([a for (s1,a,r,s2,d) in minibatch])\n",
    "            reward_batch = torch.Tensor([r for (s1,a,r,s2,d) in minibatch])\n",
    "            state2_batch = torch.cat([s2 for (s1,a,r,s2,d) in minibatch])\n",
    "            done_batch = torch.Tensor([d for (s1,a,r,s2,d) in minibatch])\n",
    "            \n",
    "            Q1 = model(state1_batch) #L\n",
    "            with torch.no_grad():\n",
    "                Q2 = model(state2_batch) #M\n",
    "            \n",
    "            Y = reward_batch + gamma * ((1 - done_batch) * torch.max(Q2,dim=1)[0]) #N\n",
    "            X = Q1.gather(dim=1,index=action_batch.long().unsqueeze(dim=1)).squeeze()\n",
    "            loss = loss_fn(X, Y.detach())\n",
    "            print(i, loss.item())\n",
    "            clear_output(wait=True)\n",
    "            optimizer.zero_grad()\n",
    "            loss.backward()\n",
    "            losses.append(loss.item())\n",
    "            optimizer.step()\n",
    "\n",
    "        if reward != -1 or mov > max_moves: #O\n",
    "            status = 0\n",
    "            mov = 0\n",
    "losses = np.array(losses)\n",
    "\n",
    "#A Set the total size of the experience replay memory\n",
    "#B Set the minibatch size\n",
    "#C Create the memory replay as a deque list\n",
    "#D Maximum number of moves before game is over\n",
    "#E Compute Q-values from input state in order to select action\n",
    "#F Select action using epsilon-greedy strategy\n",
    "#G Create experience of state, reward, action and next state as a tuple\n",
    "#H Add experience to experience replay list\n",
    "#I If replay list is at least as long as minibatch size, begin minibatch training\n",
    "#J Randomly sample a subset of the replay list\n",
    "#K Separate out the components of each experience into separate minibatch tensors\n",
    "#L Re-compute Q-values for minibatch of states to get gradients\n",
    "#M Compute Q-values for minibatch of next states but don't compute gradients\n",
    "#N Compute the target Q-values we want the DQN to learn\n",
    "#O If game is over, reset status and mov number"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def running_mean(x,N=50):\n",
    "    c = x.shape[0] - N\n",
    "    y = np.zeros(c)\n",
    "    conv = np.ones(N)\n",
    "    for i in range(c):\n",
    "        y[i] = (x[i:i+N] @ conv)/N\n",
    "    return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Loss')"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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cZu2bdvq0KFDkqRDhw55PR7l1/nbJjs7WwUFBWrQoEGIHl30Kn/uvD1v7s9rmzZtPK6vW7euWrZs6bHNGWecUWkf5de1aNHC5/Ep3weka665RjfffLPOOOMM7dq1S88884yuvfZarVixQjExMRyLEHA6nXr00Ud10UUXqWfPnpIUts+kY8eO8bfmBG/HQZLuuusunXbaaerQoYM2bdqkp556Sjt37tSUKVMkcRystHnzZg0ePFiFhYVq3Lixpk6dqu7du2vDhg28H8LI13GQeD+YQYBCjXLttde6fu7du7cGDRqk0047Td999x3BBjjh97//vevnXr16qXfv3urSpYsWLlyoIUOG2Niymmv48OHasmWLli5dandTajVfx+H//u//XD/36tVL7du315AhQ7Rr1y516dIl3M2s0c455xxt2LBBWVlZ+v7773Xvvfdq0aJFdjer1vF1HLp37877wQSG8NmoVatWiomJqVRh5vDhw2rXrp1NrapZmjdvrq5duyopKUnt2rVTcXGxMjMzPbZxf77btWvn9XiUX+dvm6ZNmxLSfCh/7vy91tu1a6e0tDSP60tLS3X06FFLjg/vKd/OPPNMtWrVSklJSZI4FlZ75JFH9Msvv2jBggU69dRTXZeH6zOJvzXH+ToO3gwaNEiSPN4THAdrxMbG6qyzzlK/fv00atQo9enTR++88w7vhzDzdRy84f1QGQHKRrGxserXr5/mzZvnuszpdGrevHke41ARvNzcXO3atUvt27dXv379VK9ePY/ne+fOnUpJSXE934MHD9bmzZs9Th7nzJmjpk2burq2Bw8e7LGP8m04Zr6dccYZateuncfzlp2drVWrVnk895mZmYqPj3dtM3/+fDmdTteH9+DBg7V48WKVlJS4tpkzZ47OOecctWjRwrUNxycw+/fv15EjR9S+fXtJHAurGIahRx55RFOnTtX8+fMrDXkM12dSbf9bU9Vx8GbDhg2S5PGe4DiEhtPpVFFREe8Hm5UfB294P3hhdxWL2m7ixIlGXFycMWHCBGPbtm3G//3f/xnNmzf3qGwC8x5//HFj4cKFRnJysrFs2TJj6NChRqtWrYy0tDTDMI6XSO3cubMxf/58Y+3atcbgwYONwYMHu25fXprzqquuMjZs2GDMnDnTaN26tdfSnE888YSxfft244MPPqCMuWEYOTk5xvr1643169cbkowxY8YY69evN/bu3WsYxvEy5s2bNzd+/PFHY9OmTcYNN9zgtYx53759jVWrVhlLly41zj77bI/S2ZmZmUbbtm2NP/7xj8aWLVuMiRMnGg0bNqxUOrtu3brGm2++aWzfvt0YOXJkrSqdbRj+j0VOTo7xr3/9y1ixYoWRnJxszJ071zj//PONs88+2ygsLHTtg2NRfQ8//LDRrFkzY+HChR7lgPPz813bhOszqTb/ranqOCQlJRkvvviisXbtWiM5Odn48ccfjTPPPNO49NJLXfvgOFjj6aefNhYtWmQkJycbmzZtMp5++mnD4XAYs2fPNgyD90O4+DsOvB/MIUBFgPfee8/o3LmzERsbawwcONBYuXKl3U2KWnfccYfRvn17IzY21ujYsaNxxx13GElJSa7rCwoKjL/+9a9GixYtjIYNGxo33XSTkZqa6rGPPXv2GNdee63RoEEDo1WrVsbjjz9ulJSUeGyzYMEC47zzzjNiY2ONM8880xg/fnw4Hl5EW7BggSGp0r97773XMIzjpcyfffZZo23btkZcXJwxZMgQY+fOnR77OHLkiHHnnXcajRs3Npo2bWrcf//9Rk5Ojsc2GzduNC6++GIjLi7O6NixozF69OhKbfnuu++Mrl27GrGxsUaPHj2M6dOnh+xxRyJ/xyI/P9+46qqrjNatWxv16tUzTjvtNOPBBx+s9AeLY1F93o6BJI/Pi3B+JtXWvzVVHYeUlBTj0ksvNVq2bGnExcUZZ511lvHEE094rHtjGBwHK/zpT38yTjvtNCM2NtZo3bq1MWTIEFd4MgzeD+Hi7zjwfjDHYRiGEb7+LgAAAACIXsyBAgAAAACTCFAAAAAAYBIBCgAAAABMIkABAAAAgEkEKAAAAAAwiQAFAAAAACYRoAAAAADAJAIUAAAhMGHCBDkcDjkcDk2YMMHu5gAALEKAAgAErDwYBPovMzPT7qYDAFAtBCgAAAAAMKmu3Q0AAES3qVOnmt62UaNGIWwJAAChR4ACAFTLjTfeaHcTAAAIG4bwAQAAAIBJBCgAgK3KC0xcfvnlkqRjx47plVde0fnnn6+WLVuqUaNG6t69u5544gkdOnTI9H6nTp2qO+64Q6effroaNmyopk2b6txzz9VDDz2k+Ph40/txOp2aNGmS7rrrLnXp0kVNmjRRbGys2rdvryFDhuill15SUlKSqX0lJCTob3/7m7p27aqGDRuqefPmGjx4sN555x0VFxdXefslS5boT3/6k84991w1adJE9erVU5s2bdS9e3ddc801eumll5SQkGD6sQEAAucwDMOwuxEAgOjicDhcP1f3z0j5vi677DK9//77uv7667V3716v2zZv3lwTJ07U1Vdf7XN/6enpuuWWW7RkyRK/9/nwww/r3XffVUxMjM/tNm3apDvuuEM7duzw+xiaN2+uY8eOeVw2YcIE3X///ZKk8ePHKyYmRn/5y19UUFDgdR+DBw/WzJkz1bRp00rXOZ1O/fWvf9VHH33ktx2SNGzYMP3yyy9VbgcACA5zoAAAESErK0s33HCD9u7dq0svvVS33nqr2rZtq5SUFH399dfasGGDMjMzdeONN2rx4sUaMGBApX3k5ubq0ksvdQWe1q1b6/7771efPn1UXFysxYsX66uvvlJJSYk+/PBDZWdn68svv/TanlWrVmnIkCHKy8uTJHXs2FF33HGHevXqpUaNGik9PV3x8fH65ZdfVFRU5PexzZw5U99//70aNmyo4cOHa8CAAYqLi9OGDRs0btw4ZWVlacWKFfrXv/6ljz/+uNLt33//fVd4atKkiW699Vb169dPrVu3VnFxsfbv36+1a9dq7ty5AT3nAIAgGAAABEiS65+V+5JkvPbaa5W2KS0tNR555BHXNt27dzfKysoqbffXv/7VtU2/fv2M9PT0StusXbvWaNGihWu7SZMmVdomOzvb6Nixo2ubv/zlL0ZBQYHX9peWlhrTpk2rdPn48eM9HlePHj2M/fv3V9pu+/btRuPGjQ1JRr169YxDhw5V2qZHjx6GJKNFixbGnj17vLbDMAyjoKDAWLlypc/rAQDVxxwoAEC1mF1E97777qtyXzfffLOefPLJSpfHxMTonXfeUf/+/SVJ27ZtqzRMLT09XZ9//rkkqWHDhvrhhx/UqlWrSvvq16+fxo4d6/p99OjRlbb58MMPdeDAAUnHh8SNGzdO9evX99rmmJgY3XDDDX4fV926dTVlyhR17Nix0nXdunXT8OHDJUklJSVee5HK51gNHTpUp512ms/7qV+/vgYNGuS3LQCA6iFAAQAihrfwVK5OnTp6/PHHXb9///33HtfPmDFDhYWFkqQ77rjDb9C4/fbb1aVLF0nS+vXrlZyc7HG9+7C+UaNGmX8APlx//fXq2rWrz+uvvPJK189btmypdH35+lmbN282VWwCABA6zIECAFSL2YV0O3fu7Pf6pk2bauDAgX63GTp0qOvn1atXe1y3atUq189XXXWV3/04HA5dddVVrp6olStX6owzzpAkHT16VFu3bpUknXHGGerVq5fffZkxePBgv9efeuqprp8rFqOQjj+eiRMnaseOHRoyZIgee+wxXX311WrYsGG12wYACAwBCgBQLVYtpNulSxeP6n7etGrVSs2bN1dmZqYOHjzocV1qaqrrZ3+9Pd62cb9t+dA9SerevXuV+zHD21BCd3Fxca6fy3vR3L322mtaunSp9u/fr6VLl2rp0qWqV6+ezj//fF144YW6/PLLddVVV/kcZggAsA5D+AAAEaF8mJrZ7XJzcz0uz8nJCWhfjRs39nrb7Oxsr9tUR5061ftz27lzZ61fv16PPvqoWrZsKen4fKlVq1bp7bff1g033KC2bdvqueeeq7IiIACgeghQAICIUF4u3Ox2FcNNkyZNAtqXewBzv637OkwVQ5qdWrVqpbfffluHDx92BafbbrvNFaiys7P10ksv6brrrpPT6bS5tQBQcxGgAAARYdeuXVUuynvkyBFlZmZKkjp06OBxXfv27V0/JyYmVnl/CQkJrp/d99WxY0fXUMJt27ZVuZ9wq1u3rgYOHKhHH31U3333ndLS0jR58mQ1a9ZMkjR//nzT89IAAIEjQAEAIkJ2dnalwhAVuZf4rliu2/332bNnV3l/c+bM8Xrbli1bqkePHpKk5ORkbd68ucp92SkmJka33nqrnn/+eddlS5Yssa9BAFDDEaAAABHjzTff9Hmd0+nUmDFjXL/feuutHtcPGzbMVURh4sSJ2rt3r899TZ482bW2Ut++fV0V+Mrdc889rp9HjBhh/gHYyP0xlJaW2tgSAKjZCFAAgIjx/fffe4Skck6nU4899pirh6pHjx4aNmyYxzatWrXSAw88IEnKz8/XrbfeqiNHjlTa1/r16/XQQw+5fvcWkB566CFXafHp06froYce8lodr7xtP//8s8lHGLjU1FQ9/vjj2rVrl89tSktL9cknn7h+P++880LWHgCo7RxGVQPOAQCowL3ceCDzbQYNGuQxV8l9X+edd56ys7O1e/duXXbZZbr11lvVpk0b7du3T19//bXWr18v6XjJ7yVLlmjAgAGV9p+bm6sBAwZox44dkqTWrVvrgQceUO/evVVcXKwlS5boyy+/dC1G+4c//MFj0Vx3q1at0pAhQ1wFKTp27Kjf//736tWrlxo2bKiMjAxt2LBBv/zyi/Ly8lxzs8pNmDBB999/vyRp/Pjxuu+++3w+L3v27HH1IN17772aMGGC1+v69eunSy65ROeee65atGih3Nxc7d69W99++60rYJ155pnauHGjZRUEAQCeWAcKAFAtN910k+ltp06d6nPdqGbNmunLL7/Ub3/7Wy1atEiLFi3yus2kSZO8hifpeGW+xYsX6+abb9bSpUuVnp6u0aNHV9rO4XDooYce0nvvveezrYMGDdKSJUt0++23KykpSQcOHNBbb73lddsWLVr43E91uYfV+Ph4xcfH+9y2Z8+emjZtGuEJAEKIAAUAiBg9e/bU+vXr9f7772vKlClKTk5WUVGROnfurOuvv16PP/54pR6silq3bq0lS5ZoypQpmjhxolauXKn09HTVrVtXHTp00OWXX64HH3xQ/fv3r7I9ffv21fbt2/XNN99o2rRpWrt2rTIyMlRWVqZWrVqpe/fuuuKKK3TXXXdZ9RRUctppp2nXrl2aNWuWli9frk2bNiklJUU5OTmKjY1Vu3bt1LdvX91yyy26/fbbVbcuf9oBIJQYwgcAsFV5D8tll12mhQsX2tsYAACqQBEJAAAAADCJAAUAAAAAJhGgAAAAAMAkAhQAAAAAmESAAgAAAACTqHUKALAVxWABANGEHigAAAAAMIkABQAAAAAmEaAAAAAAwCQCFAAAAACYRIACAAAAAJMIUAAAAABgEgEKAAAAAEwiQAEAAACASQQoAAAAADDp/wFy4Wu5WGEIFgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,7))\n",
    "plt.plot(losses)\n",
    "plt.xlabel(\"Epochs\",fontsize=22)\n",
    "plt.ylabel(\"Loss\",fontsize=22)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Games played: 1000, # of wins: 894\n",
      "Win percentage: 89.4%\n"
     ]
    }
   ],
   "source": [
    "max_games = 1000\n",
    "wins = 0\n",
    "for i in range(max_games):\n",
    "    win = test_model(model, mode='random', display=False)\n",
    "    if win:\n",
    "        wins += 1\n",
    "win_perc = float(wins) / float(max_games)\n",
    "print(\"Games played: {0}, # of wins: {1}\".format(max_games,wins))\n",
    "print(\"Win percentage: {}%\".format(100.0*win_perc))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initial State:\n",
      "[[' ' ' ' 'P' ' ']\n",
      " [' ' ' ' ' ' ' ']\n",
      " ['W' '+' ' ' ' ']\n",
      " [' ' '-' ' ' ' ']]\n",
      "Move #: 0; Taking action: d\n",
      "[[' ' ' ' ' ' ' ']\n",
      " [' ' ' ' 'P' ' ']\n",
      " ['W' '+' ' ' ' ']\n",
      " [' ' '-' ' ' ' ']]\n",
      "Move #: 1; Taking action: l\n",
      "[[' ' ' ' ' ' ' ']\n",
      " [' ' 'P' ' ' ' ']\n",
      " ['W' '+' ' ' ' ']\n",
      " [' ' '-' ' ' ' ']]\n",
      "Move #: 2; Taking action: d\n",
      "[[' ' ' ' ' ' ' ']\n",
      " [' ' ' ' ' ' ' ']\n",
      " ['W' '+' ' ' ' ']\n",
      " [' ' '-' ' ' ' ']]\n",
      "Game won! Reward: 10\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_model(model, mode='random')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### Listing 3.7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import copy\n",
    "\n",
    "l1 = 64\n",
    "l2 = 150\n",
    "l3 = 100\n",
    "l4 = 4\n",
    "\n",
    "\n",
    "model = torch.nn.Sequential(\n",
    "    torch.nn.Linear(l1, l2),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(l2, l3),\n",
    "    torch.nn.ReLU(),\n",
    "    torch.nn.Linear(l3,l4)\n",
    ")\n",
    "\n",
    "model2 = copy.deepcopy(model) #A\n",
    "model2.load_state_dict(model.state_dict()) #B\n",
    "\n",
    "loss_fn = torch.nn.MSELoss()\n",
    "learning_rate = 1e-3\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)\n",
    "\n",
    "gamma = 0.9\n",
    "epsilon = 0.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4999 0.018897129222750664\n"
     ]
    }
   ],
   "source": [
    "from collections import deque\n",
    "epochs = 5000\n",
    "losses = []\n",
    "mem_size = 1000\n",
    "batch_size = 200\n",
    "replay = deque(maxlen=mem_size)\n",
    "max_moves = 50\n",
    "h = 0\n",
    "sync_freq = 500 #A\n",
    "j=0\n",
    "for i in range(epochs):\n",
    "    game = Gridworld(size=4, mode='random')\n",
    "    state1_ = game.board.render_np().reshape(1,64) + np.random.rand(1,64)/100.0\n",
    "    state1 = torch.from_numpy(state1_).float()\n",
    "    status = 1\n",
    "    mov = 0\n",
    "    while(status == 1): \n",
    "        j+=1\n",
    "        mov += 1\n",
    "        qval = model(state1)\n",
    "        qval_ = qval.data.numpy()\n",
    "        if (random.random() < epsilon):\n",
    "            action_ = np.random.randint(0,4)\n",
    "        else:\n",
    "            action_ = np.argmax(qval_)\n",
    "        \n",
    "        action = action_set[action_]\n",
    "        game.makeMove(action)\n",
    "        state2_ = game.board.render_np().reshape(1,64) + np.random.rand(1,64)/100.0\n",
    "        state2 = torch.from_numpy(state2_).float()\n",
    "        reward = game.reward()\n",
    "        done = True if reward > 0 else False\n",
    "        exp =  (state1, action_, reward, state2, done)\n",
    "        replay.append(exp) #H\n",
    "        state1 = state2\n",
    "        \n",
    "        if len(replay) > batch_size:\n",
    "            minibatch = random.sample(replay, batch_size)\n",
    "            state1_batch = torch.cat([s1 for (s1,a,r,s2,d) in minibatch])\n",
    "            action_batch = torch.Tensor([a for (s1,a,r,s2,d) in minibatch])\n",
    "            reward_batch = torch.Tensor([r for (s1,a,r,s2,d) in minibatch])\n",
    "            state2_batch = torch.cat([s2 for (s1,a,r,s2,d) in minibatch])\n",
    "            done_batch = torch.Tensor([d for (s1,a,r,s2,d) in minibatch])\n",
    "            Q1 = model(state1_batch) \n",
    "            with torch.no_grad():\n",
    "                Q2 = model2(state2_batch) #B\n",
    "            \n",
    "            Y = reward_batch + gamma * ((1-done_batch) * torch.max(Q2,dim=1)[0])\n",
    "            X = Q1.gather(dim=1,index=action_batch.long().unsqueeze(dim=1)).squeeze()\n",
    "            loss = loss_fn(X, Y.detach())\n",
    "            print(i, loss.item())\n",
    "            clear_output(wait=True)\n",
    "            optimizer.zero_grad()\n",
    "            loss.backward()\n",
    "            losses.append(loss.item())\n",
    "            optimizer.step()\n",
    "            \n",
    "            if j % sync_freq == 0: #C\n",
    "                model2.load_state_dict(model.state_dict())\n",
    "        if reward != -1 or mov > max_moves:\n",
    "            status = 0\n",
    "            mov = 0\n",
    "        \n",
    "losses = np.array(losses)\n",
    "\n",
    "#A Set the update frequency for synchronizing the target model parameters to the main DQN\n",
    "#B Use the target network to get the maiximum Q-value for the next state\n",
    "#C Copy the main model parameters to the target network"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Loss')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAJqCAYAAAA2WuG6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/H5lhTAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB08UlEQVR4nO3deXxU1f3/8fckIWHfZFdQ3GURERHRarXwFSlarVqtWovan1WLba3Whbbiiri07ihqK7ijIKCCsu/7vu97gABhyb5nzu+PkGEmmblzJ3Mzk5m8no9HHo9k5tx7T+7cmTmfe875HJcxxggAAAAAELaEaFcAAAAAAOIFARYAAAAAOIQACwAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHBIUrQrUJO53W4dOHBAjRo1ksvlinZ1AAAAAESJMUbZ2dlq166dEhIs+qlMjJozZ465/vrrTdu2bY0kM378+IBlH3jgASPJvPHGGyEdIzU11Ujihx9++OGHH3744YcffvgxkkxqaqplDBGzPVi5ubnq1q2b7rvvPt18880By40fP16LFy9Wu3btQj5Go0aNJEmpqalq3LhxlesKAAAAILZlZWWpffv2nhghkJgNsPr376/+/ftbltm/f7/+/Oc/a8qUKRowYEDIxygfFti4cWMCLAAAAABBpw7FbIAVjNvt1t13363HH39cnTt3trVNYWGhCgsLPX9nZWVVV/UAAAAAxKG4zSL4yiuvKCkpSX/5y19sbzNs2DA1adLE89O+fftqrCEAAACAeBOXAdaKFSv01ltvadSoUSFl/xs8eLAyMzM9P6mpqdVYSwAAAADxJi4DrHnz5unw4cPq0KGDkpKSlJSUpD179uixxx7TGWecEXC7lJQUz3wr5l0BAAAACFVczsG6++671bdvX5/H+vXrp7vvvlv33ntvlGoFAAAAIN7FbICVk5Oj7du3e/7etWuXVq9erebNm6tDhw465ZRTfMrXqVNHbdq00XnnnRfpqgIAAACoJWI2wFq+fLmuueYaz9+PPvqoJGngwIEaNWpUlGoFAAAAoDaL2QDr6quvljHGdvndu3dXX2UAAAAAQHGa5AIAAAAAooEACwAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHAIARYAAAAAOIQACwAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgxbD8olLd/+lyjVmeGu2qAAAAABABVkwbtXC3pm08pMfHro12VQAAAACIACumZeQXRbsKAAAAALwQYAEAAACAQwiwAAAAAMAhBFgAAAAA4BACLAAAAABwCAEWAAAAADiEAAsAAAAAHEKABQAAAAAOIcACAAAAAIcQYAEAAACAQwiwAAAAAMAhBFgAAAAA4BACLAAAAABwCAFWDHPJFe0qAAAAAPBCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAqwY5nJFuwYAAAAAvBFgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHAIARYAAAAAOIQACwAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHAIARYAAAAAOIQAK4a5ol0BAAAAAD4IsAAAAADAIQRYAAAAAOAQAqwYZqJdAQAAAAA+CLAAAAAAwCEEWAAAAADgEAIsAAAAAHBIzAZYc+fO1Q033KB27drJ5XJpwoQJnueKi4v15JNPqmvXrmrQoIHatWun3//+9zpw4ED0KgwAAAAg7sVsgJWbm6tu3bpp+PDhlZ7Ly8vTypUr9fTTT2vlypUaN26ctmzZol/96ldRqCkAAACA2iIp2hWoqv79+6t///5+n2vSpImmTZvm89i7776rSy+9VHv37lWHDh0iUUUAAAAAtUzMBlihyszMlMvlUtOmTQOWKSwsVGFhoefvrKysCNQMAAAAQLyI2SGCoSgoKNCTTz6pO+64Q40bNw5YbtiwYWrSpInnp3379hGsJQAAAIBYF/cBVnFxsW677TYZY/T+++9blh08eLAyMzM9P6mpqRGqJQAAAIB4ENdDBMuDqz179mjmzJmWvVeSlJKSopSUlAjVLnyuaFcAAAAAgI+4DbDKg6tt27Zp1qxZOuWUU6JdJQAAAABxLmYDrJycHG3fvt3z965du7R69Wo1b95cbdu21a233qqVK1dq4sSJKi0t1cGDByVJzZs3V3JycrSqDQAAACCOxWyAtXz5cl1zzTWevx999FFJ0sCBA/Xss8/q+++/lyRddNFFPtvNmjVLV199daSqCQAAAKAWidkA6+qrr5YxJuDzVs8BAAAAQHWI+yyCAAAAABApBFgAAAAA4BACLAAAAABwCAEWAAAAADiEAAsAAAAAHEKABQAAAAAOIcACAAAAAIcQYAEAAACAQwiwAAAAAMAhBFgxzOWKdg0AAAAAeCPAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBVgxzyRXtKgAAAADwQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHAIARYAAAAAOIQAK4YZmWhXAQAAAIAXAiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGDFMJdc0a4CAAAAAC8EWAAAAADgEAIsAAAAAHAIARYAAAAAOIQACwAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHAIARYAAAAAOIQACwAAAAAcQoAVw1yuaNcAAAAAgDcCLAAAAABwCAEWAAAAADiEAAsAAAAAHEKABQAAAAAOIcACAAAAAIcQYAEAAACAQwiwAAAAAMAhBFgAAAAA4BACLAAAAABwCAEWAAAAADiEAAsAAAAAHBKzAdbcuXN1ww03qF27dnK5XJowYYLP88YYDRkyRG3btlW9evXUt29fbdu2LTqVBQAAAFArxGyAlZubq27dumn48OF+n3/11Vf19ttva8SIEVqyZIkaNGigfv36qaCgIMI1BQAAAFBbJEW7AlXVv39/9e/f3+9zxhi9+eab+te//qUbb7xRkvTpp5+qdevWmjBhgn7729/63a6wsFCFhYWev7OyspyvuINc0a4AAAAAAB8x24NlZdeuXTp48KD69u3reaxJkybq1auXFi1aFHC7YcOGqUmTJp6f9u3bR6K6AAAAAOJEXAZYBw8elCS1bt3a5/HWrVt7nvNn8ODByszM9PykpqZWaz0BAAAAxJeYHSJYHVJSUpSSkhLtagAAAACIUXHZg9WmTRtJ0qFDh3weP3TokOc5AAAAAHBaXAZYHTt2VJs2bTRjxgzPY1lZWVqyZIl69+4dxZoBAAAAiGcxO0QwJydH27dv9/y9a9curV69Ws2bN1eHDh30yCOP6MUXX9Q555yjjh076umnn1a7du100003Ra/SAAAAAOJazAZYy5cv1zXXXOP5+9FHH5UkDRw4UKNGjdITTzyh3Nxc/fGPf1RGRoZ+9rOfafLkyapbt260qgwAAAAgzsVsgHX11VfLGBPweZfLpeeff17PP/98BGsFAAAAoDaLyzlYAAAAABANBFgAAAAA4BACLAAAAABwCAFWDAs8Aw0AAABANBBgAQAAAIBDCLBimCvaFQAAAADggwALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsGKZyxXtGgAAAADwQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAIsAAAAAHAIARYAAAAAOIQACwAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCEEWAAAAADgEAKsGOaKdgUAAAAA+CDAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBVgxzuaJdAwAAAADeCLAAAAAAwCEEWDHMmGjXAAAAAIA3AiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBFgAAAAA4hAArhrlc0a4BAAAAAG8EWAAAAADgEAIsAAAAAHBI3AZYpaWlevrpp9WxY0fVq1dPZ511ll544QUZY6JdNQAAAABxKinaFagur7zyit5//3198skn6ty5s5YvX657771XTZo00V/+8pdoVw8AAABAHIrbAGvhwoW68cYbNWDAAEnSGWecoa+++kpLly4NuE1hYaEKCws9f2dlZVV7PQEAAADEj7gdInj55ZdrxowZ2rp1qyRpzZo1mj9/vvr37x9wm2HDhqlJkyaen/bt20equgAAAADiQNz2YD311FPKysrS+eefr8TERJWWlmro0KG66667Am4zePBgPfroo56/s7KyCLIAAAAA2Ba3AdY333yjL774Ql9++aU6d+6s1atX65FHHlG7du00cOBAv9ukpKQoJSUlwjUFAAAAEC/iNsB6/PHH9dRTT+m3v/2tJKlr167as2ePhg0bFjDAAgAAAIBwxO0crLy8PCUk+P57iYmJcrvdUaoRAAAAgHgXtz1YN9xwg4YOHaoOHTqoc+fOWrVqlV5//XXdd9990a4aAAAAgDgVtwHWO++8o6efflp/+tOfdPjwYbVr104PPPCAhgwZEu2qAQAAAIhTcRtgNWrUSG+++abefPPNaFcFAAAAQC0Rt3OwagOXXNGuAgAAAAAvBFgAAAAA4BACLAAAAABwCAEWAAAAADiEAAsAAAAAHEKABQAAAAAOIcACAAAAAIcQYAEAAACAQwiwAAAAAMAhBFgAAAAA4BACLAAAAABwCAEWAAAAADgkKdIHLC0t1YYNG1RSUqLzzjtPDRo0iHQVAAAAAKBaONaDlZubq3HjxmncuHHau3ev3zKffvqp2rRpo+7du6tnz55q1aqV/vGPf8gY41Q1AAAAACBqHOvBGjt2rO69914lJiZq586dlZ6fPHmy7rnnHrlcLk9AlZ+fr1deeUW5ubl66623nKpKreFyRbsGAAAAALw51oM1ffp0SdKll16q9u3bV3r+ySeflCQZY9StWzfddNNNatSokYwxGj58uNasWeNUVQAAAAAgKhwLsDZu3CiXy6Wrrrqq0nOrV6/WunXr5HK59Oc//1mrVq3SuHHjtGzZMjVo0EDGGH388cdOVQUAAAAAosKxAOvIkSOSpPPOO6/Sc1OnTpUkJSUlaciQIZ7Hzz33XN16660yxmjBggVOVQUAAAAAosLxAKtx48aVnps/f74k6bLLLtMpp5zi89yll14qSX7nbQEAAABALHEswHK73ZKkzMzMSs8tWrRILpdLV155ZaXnWrZsKUnKyclxqioAAAAAEBWOBVjlPVN79uzxeXz16tU6evSoJKl3796VtsvPz5ckJScnO1UVAAAAAIgKxwKsCy+8UMYYjRkzxufxTz75pOxACQn62c9+Vmm78jWz2rZt61RVag2WDwMAAABqFscCrBtvvFGStHnzZt1xxx2aPHmyhg4dquHDh8vlcqlv375q0qRJpe2WLVsmyX9yDAAAAACIJY4tNHzvvffq9ddf17Zt2/TNN9/om2++kVS27lViYqKefvrpStvk5eVp+vTpcrlcnmQXAAAAABCrHOvBSk5O1pQpU9S9e3cZYzw/9evX14gRI3T55ZdX2mb06NHKy8uTJP3iF79wqioAAAAAEBWO9WBJ0hlnnKEVK1ZoxYoV2r59uxo0aKArrrhCzZo181u+bt26euaZZ+RyufwGYAAAAAAQSxwNsMr16NFDPXr0CFruzjvvrI7DAwAAAEBUODZEEJHnckW7BgAAAAC8VUsPlpXDhw9r8eLFKikpUbdu3XTWWWdFugoAAAAAUC0cC7COHTumUaNGSZIGDBjgN+36Cy+8oKFDh6q4uNjz2O23366PP/5YdevWdaoqAAAAABAVjgVYX3/9tf7+978rOTlZAwcOrPT8F1984UloYbxWyP3666/ldrs1evRop6oCAAAAAFHh2BysWbNmSZKuvPJKnXLKKZWeHzJkiKSydbFuvPFGPfLII2rfvr2MMRozZozmzZvnVFUAAAAAICocC7C2bt0ql8ul3r17V3pu4cKF2rVrl1wul1588UWNHz9er7/+upYtW+ZJ4f7ZZ585VRUAAAAAiArHAqwjR45Iks4555xKz02fPl2SlJKSor/+9a+ex1u1aqU77rhDxhgtXrzYqaoAAAAAQFQ4FmAdPXpUktSgQYNKzy1YsEBS2fDBis9feOGFkqS9e/c6VRUAAAAAiArHAizXiUWZjh8/7vO42+3WkiVL5HK5dOWVV1barny+Vl5enlNVAQAAAICocCzAatWqlSRp27ZtPo8vXrxYWVlZkqTLLrus0nY5OTmSpHr16jlVFQAAAACICscCrO7du8sYo9GjR6uoqMjz+EcffSRJSk5O1hVXXFFpu507d0qS2rVr51RVAAAAACAqHAuwfvOb30iSUlNT1adPH40YMUL333+/PvnkE7lcLv3qV7/y20u1ePFiuVwuXXDBBU5VBQAAAACiwrGFhu+44w698847WrJkiRYuXKiFCxd6nktJSdEzzzxTaZuMjAzNnj1bktSrVy+nqgIAAAAAUeFokotJkybppptuksvlkjFGxhideuqp+vbbb9WpU6dK24waNUrFxcWSpL59+zpVFQAAAACICsd6sCSpefPmGjdunNLT07Vz5041aNBAnTp1UkKC/ziuU6dOGjly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jaNal9qE8x4dnPfI45xHB+c9Ojjv0cF5jzzOubOMMcrOzla7du2UkBB4phU9WBYSEhJ02mmnRbsaPho3bswbJAo479HBeY88znl0cN6jg/MeHZz3yOOcO8eq56ocSS4AAAAAwCEEWAAAAADgEAKsGJGSkqJnnnlGKSkp0a5KrcJ5jw7Oe+RxzqOD8x4dnPfo4LxHHuc8OkhyAQAAAAAOoQcLAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEMIsGLE8OHDdcYZZ6hu3brq1auXli5dGu0qxYRnn31WLpfL5+f888/3PF9QUKBBgwbplFNOUcOGDXXLLbfo0KFDPvvYu3evBgwYoPr166tVq1Z6/PHHVVJS4lNm9uzZuvjii5WSkqKzzz5bo0aNisS/V2PMnTtXN9xwg9q1ayeXy6UJEyb4PG+M0ZAhQ9S2bVvVq1dPffv21bZt23zKHDt2THfddZcaN26spk2b6g9/+INycnJ8yqxdu1ZXXnml6tatq/bt2+vVV1+tVJcxY8bo/PPPV926ddW1a1f9+OOPjv+/NUWw837PPfdUuv6vu+46nzKc99AMGzZMPXv2VKNGjdSqVSvddNNN2rJli0+ZSH6u1JbvBjvn/eqrr650vT/44IM+ZTjvoXn//fd14YUXehap7d27t3766SfP81zr1SPYeedajwEGNd7o0aNNcnKy+fjjj82GDRvM/fffb5o2bWoOHToU7arVeM8884zp3LmzSUtL8/ykp6d7nn/wwQdN+/btzYwZM8zy5cvNZZddZi6//HLP8yUlJaZLly6mb9++ZtWqVebHH380LVq0MIMHD/aU2blzp6lfv7559NFHzcaNG80777xjEhMTzeTJkyP6v0bTjz/+aP75z3+acePGGUlm/PjxPs+//PLLpkmTJmbChAlmzZo15le/+pXp2LGjyc/P95S57rrrTLdu3czixYvNvHnzzNlnn23uuOMOz/OZmZmmdevW5q677jLr1683X331lalXr5754IMPPGUWLFhgEhMTzauvvmo2btxo/vWvf5k6deqYdevWVfs5iIZg533gwIHmuuuu87n+jx075lOG8x6afv36mZEjR5r169eb1atXm1/+8pemQ4cOJicnx1MmUp8rtem7wc55//nPf27uv/9+n+s9MzPT8zznPXTff/+9mTRpktm6davZsmWL+cc//mHq1Klj1q9fb4zhWq8uwc4713rNR4AVAy699FIzaNAgz9+lpaWmXbt2ZtiwYVGsVWx45plnTLdu3fw+l5GRYerUqWPGjBnjeWzTpk1Gklm0aJExpqwBm5CQYA4ePOgp8/7775vGjRubwsJCY4wxTzzxhOncubPPvm+//XbTr18/h/+b2FCxoe92u02bNm3Ma6+95nksIyPDpKSkmK+++soYY8zGjRuNJLNs2TJPmZ9++sm4XC6zf/9+Y4wx7733nmnWrJnnvBtjzJNPPmnOO+88z9+33XabGTBggE99evXqZR544AFH/8eaKFCAdeONNwbchvMevsOHDxtJZs6cOcaYyH6u1Obvhorn3ZiyRudf//rXgNtw3p3RrFkz89///pdrPcLKz7sxXOuxgCGCNVxRUZFWrFihvn37eh5LSEhQ3759tWjRoijWLHZs27ZN7dq105lnnqm77rpLe/fulSStWLFCxcXFPuf2/PPPV4cOHTzndtGiReratatat27tKdOvXz9lZWVpw4YNnjLe+ygvw+tTZteuXTp48KDPOWrSpIl69erlc56bNm2qSy65xFOmb9++SkhI0JIlSzxlrrrqKiUnJ3vK9OvXT1u2bNHx48c9ZXgtfM2ePVutWrXSeeedp4ceekhHjx71PMd5D19mZqYkqXnz5pIi97lS278bKp73cl988YVatGihLl26aPDgwcrLy/M8x3kPT2lpqUaPHq3c3Fz17t2baz1CKp73clzrNVtStCsAa0eOHFFpaanPm0SSWrdurc2bN0epVrGjV69eGjVqlM477zylpaXpueee05VXXqn169fr4MGDSk5OVtOmTX22ad26tQ4ePChJOnjwoN9zX/6cVZmsrCzl5+erXr161fTfxYby8+TvHHmfw1atWvk8n5SUpObNm/uU6dixY6V9lD/XrFmzgK9F+T5qm+uuu04333yzOnbsqB07dugf//iH+vfvr0WLFikxMZHzHia3261HHnlEV1xxhbp06SJJEftcOX78eK39bvB33iXpzjvv1Omnn6527dpp7dq1evLJJ7VlyxaNGzdOEue9qtatW6fevXuroKBADRs21Pjx49WpUyetXr2aa70aBTrvEtd6LCDAQlzr37+/5/cLL7xQvXr10umnn65vvvmm1gc+iH+//e1vPb937dpVF154oc466yzNnj1bffr0iWLN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V12lW2+9Va1bt9bevXv1xRdfaPXq1crIyNBNN92kuXPnqmfPnpX2kZOTo6uuusoTELVs2VL33nuvunXrpqKiIs2dO1eff/65iouL9d577ykrK0ufffaZ3/osWbJEffr0UW5uriTp1FNP1e23366uXbuqQYMGSk9P14oVKzRx4kQVFhZa/m+TJ0/W2LFjVb9+fQ0aNEg9e/ZUSkqKVq9erREjRigzM1OLFi3S3//+d3344YeVtn/33Xc9wVWjRo106623qkePHmrZsqWKioq0b98+LV++XNOnTw/pnAMAQmQAAKgGkjw/Tu5LknnllVcqlSkpKTEPP/ywp0ynTp1MaWlppXJ/+tOfPGV69Ohh0tPTK5VZvny5adasmafc119/XalMVlaWOfXUUz1lHnjgAZOfn++3/iUlJWbChAmVHh85cqTP/9W5c2ezb9++SuU2bdpkGjZsaCSZOnXqmIMHD1Yq07lzZyPJNGvWzOzevdtvPYwxJj8/3yxevDjg8wCA8DAHCwBQ7ewuMnzPPfcE3dfNN9+sJ554otLjiYmJeuutt3TJJZdIkjZu3FhpGFx6ero+/vhjSVL9+vX17bffqkWLFpX21aNHD73//vuev19++eVKZd577z3t379fUtmQuxEjRqhu3bp+65yYmKgbb7zR8v9KSkrSuHHjdOqpp1Z67vzzz9egQYMkScXFxX57ocrnePXt21enn356wOPUrVtXvXr1sqwLAKDqCLAAADHFX3BVLiEhQY899pjn77Fjx/o8/+OPP6qgoECSdPvtt1sGIrfddpvOOussSdKqVau0a9cun+e9hw0OGzbM/j8QwPXXX69zzz034PP/93//5/l9/fr1lZ4vXz9s3bp1tpJhAACqB3OwAADVzu5Cwx06dLB8vnHjxrr00ksty/Tt29fz+9KlS32eW7Jkief3a6+91nI/LpdL1157racna/HixerYsaMk6dixY9qwYYMkqWPHjuratavlvuzo3bu35fOnnXaa5/eKyTKksv9n9OjR2rx5s/r06aNHH31U/fr1U/369cOuGwDAPgIsAEC1c2qh4bPOOssnO6E/LVq0UNOmTZWRkaEDBw74PJeWlub53aq3yF8Z723LhwZKUqdOnYLuxw5/QxW9paSkeH4v74Xz9sorr2j+/Pnat2+f5s+fr/nz56tOnTq6+OKLdfnll+vqq6/WtddeG3AYIwDAGQwRBADEjPJhcHbL5eTk+DyenZ0d0r4aNmzod9usrCy/ZcKRkBDeV3KHDh20atUqPfLII2revLmksvlaS5Ys0RtvvKEbb7xRrVu31pAhQ4JmNAQAVB0BFgAgZpSnQ7dbrmLw06hRo5D25R2geW/rvQ5VxSAumlq0aKE33nhDhw4d8gRWv/nNbzwBV1ZWll544QX98pe/lNvtjnJtASA+EWABAGLGjh07gi5afPToUWVkZEiS2rVr5/Nc27ZtPb9v27Yt6PG2bt3q+d17X6eeeqpnqOLGjRuD7ifSkpKSdOmll+qRRx7RN998o8OHD2vMmDFq0qSJJGnmzJm258UBAEJDgAUAiBlZWVmVEldU5J3CvGI6cu+/p06dGvR406ZN87tt8+bN1blzZ0nSrl27tG7duqD7iqbExETdeuutevbZZz2PzZs3L3oVAoA4RoAFAIgp//73vwM+53a79frrr3v+vvXWW32eHzBggCfJw+jRo7Vnz56A+xozZoxnbanu3bt7MgiW+/3vf+/5ffDgwfb/gSjy/h9KSkqiWBMAiF8EWACAmDJ27FifIKqc2+3Wo48+6unh6ty5swYMGOBTpkWLFvrDH/4gScrLy9Ott96qo0ePVtrXqlWr9OCDD3r+9hdAPfjgg57U6ZMmTdKDDz7oN7tfed1++OEHm/9h6NLS0vTYY49px44dAcuUlJToo48+8vx90UUXVVt9AKA2c5lgg9kBAKgC73Tqocz36dWrl89cKe99XXTRRcrKytLOnTv185//XLfeeqtatWql1NRUffHFF1q1apWkspTm8+bNU8+ePSvtPycnRz179tTmzZslSS1bttQf/vAHXXjhhSoqKtK8efP02WefeRbr/d3vfuezqLC3JUuWqE+fPp6EGaeeeqp++9vfqmvXrqpfv76OHDmi1atXa+LEicrNzfXMDSs3atQo3XvvvZKkkSNH6p577gl4Xnbv3u3pgRo4cKBGjRrl97kePXroyiuv1AUXXKBmzZopJydHO3fu1FdffeUJwM4880ytWbPGsQyIAICTWAcLAFDtfv3rX9suO378+IDrZjVp0kSfffaZbrjhBs2ZM0dz5szxW+brr7/2G1xJZZkF586dq5tvvlnz589Xenq6Xn755UrlXC6XHnzwQb3zzjsB69qrVy/NmzdPt912m7Zv3679+/frP//5j9+yzZo1C7ifcHkHsytWrNCKFSsClu3SpYsmTJhAcAUA1YQACwAQU7p06aJVq1bp3Xff1bhx47Rr1y4VFhaqQ4cOuv766/XYY49V6gGrqGXLlpo3b57GjRun0aNHa/HixUpPT1dSUpLatWunq6++Wvfff78uueSSoPXp3r27Nm3apC+//FITJkzQ8uXLdeTIEZWWlqpFixbq1KmTfvGLX+jOO+906hRUcvrpp2vHjh2aMmWKFi5cqLVr12rv3r3Kzs5WcnKy2rRpo+7du+uWW27RbbfdpqQkvv4BoLowRBAAUOOV99D8/Oc/1+zZs6NbGQAALJDkAgAAAAAcQoAFAAAAAA4hwAIAAAAAhxBgAQAAAIBDCLAAAAAAwCHkaQUA1HgkvAUAxAp6sAAAAADAIQRYAAAAAOAQAiwAAAAAcAgBFgAAAAA4hAALAAAAABxCgAUAAAAADiHAAgAAAACHEGABAAAAgEP+PxsQIgpLVuLVAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10,7))\n",
    "plt.plot(losses)\n",
    "plt.xlabel(\"Epochs\",fontsize=22)\n",
    "plt.ylabel(\"Loss\",fontsize=22)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Games played: 1000, # of wins: 905\n",
      "Win percentage: 90.5%\n"
     ]
    }
   ],
   "source": [
    "max_games = 1000\n",
    "wins = 0\n",
    "for i in range(max_games):\n",
    "    win = test_model(model, mode='random', display=False)\n",
    "    if win:\n",
    "        wins += 1\n",
    "win_perc = float(wins) / float(max_games)\n",
    "print(\"Games played: {0}, # of wins: {1}\".format(max_games,wins))\n",
    "print(\"Win percentage: {}%\".format(100.0*win_perc))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
